package com.duobaoyu.dby.supply.common.biz.vo.order;

import com.duobaoyu.dby.supply.common.biz.serializer.BigDecimalSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 补单明细
 * @author chenms
 * @date 2023/10/17 6:10 PM
 */
@Data
public class OrderRepairDetailVO implements Serializable {

    /**
     * 订单信息
     */
    private OrderInfoVO orderInfo;

    /**
     * 收件信息
     */
    private OrderConsigneeVO orderConsignee;

    /**
     * 订单商品
     */
    private List<OrderProductVO> orderProductList;



    /**
     * 订单基本信息
     */
    @Data
    public static class OrderInfoVO {
        /**
         * 供应链订单号
         */
        private String orderSn;

        /**
         * 供应链交易单号
         */
        private String supplyTradeSn;

        /**
         * 业务订单交易号
         */
        private String bizTradeSn;

        /**
         * 渠道交易单号
         */
        private String channelTradeOrderSn;

        /**
         * 渠道编码
         */
        private String channelCode;

        /**
         * 渠道名称
         */
        private String channelCodeMsg;

        /**
         * 渠道订单金额
         */
        @JsonSerialize(using = BigDecimalSerializer.class)
        private BigDecimal channelOrderAmount;

        /**
         * 渠道订单运费
         */
        @JsonSerialize(using = BigDecimalSerializer.class)
        private BigDecimal channelFreightAmount;

        /**
         * 渠道合计金额(支付总金额)
         */
        @JsonSerialize(using = BigDecimalSerializer.class)
        private BigDecimal channelTotalAmount;


        /**
         * 订单下单时间
         */
        private LocalDateTime orderCreateTime;

        /**
         * 补单时间
         */
        private LocalDateTime lastRepairTime;

        /**
         * 是否大额订单
         */
        private Boolean isLargeAmountOrder;

        /**
         * 异常类型
         */
        private Integer exceptionType;

        /**
         * 异常类型
         */
        private String exceptionTypeStr;

        /**
         * 展示来源渠道
         */
        private String showServerName;

        /**
         * 补单状态
         */
        private Integer repairStatus;

        /**
         * 补单状态描述
         */
        private String repairStatusStr;

        /**
         * 订单类型
         */
        private String orderType;
    }

    /**
     * 订单商品
     */
    @Data
    public static class OrderProductVO {
        /**
         * SKU编码
         */
        private String skuCode;

        /**
         * sku名称
         */
        private String skuName;

        /**
         * 展示图片
         */
        private String skuPic;

        /**
         * 数量
         */
        private Integer skuNum;

        /**
         * 商品销售属性
         */
        private List<SaleAttributeVO> saleAttributes;

        /**
         * 平台成本价格
         */
        @JsonSerialize(using = BigDecimalSerializer.class)
        private BigDecimal platformPrice;

        /**
         * 商品总金额
         */
        @JsonSerialize(using = BigDecimalSerializer.class)
        private BigDecimal totalAmount;

    }

    /**
     * 收货信息
     */
    @Data
    public static class OrderConsigneeVO {
        /**
         * 省名称
         */
        @ApiModelProperty(value = "省名称")
        private String provinceName;
        /**
         * 市名称
         */
        @ApiModelProperty(value = "市名称")
        private String cityName;
        /**
         * 区名称
         */
        @ApiModelProperty(value = "区名称")
        private String countyName;

        /**
         * 县、镇名称
         */
        @ApiModelProperty(value = "县、镇名称")
        private String townName;
        /**
         * 详细地址
         */
        @ApiModelProperty(value = "详细地址")
        private String address;
        /**
         * 收件人姓名
         */
        private String recipientName;
        /**
         * 收件人手机号
         */
        private String recipientMobile;
        /**
         * 收件人身份证号
         */
        private String recipientIdCardNum;
    }

}
